const mysql = require('mysql2/promise');
const dotenv = require('dotenv');
const path = require('path');
const fs = require('fs');

// 尝试加载.env.local文件
const envPath = path.resolve(process.cwd(), '.env.local');
dotenv.config({ path: envPath });

// 如果环境变量未加载成功，尝试其他路径
if (!process.env.DB_HOST) {
  const parentEnvPath = path.resolve(process.cwd(), '..', '.env.local');
  if (fs.existsSync(parentEnvPath)) {
    dotenv.config({ path: parentEnvPath });
    console.log(`已从上级目录加载环境变量: ${parentEnvPath}`);
  }
}

// 数据库配置
const dbConfig = {
  host: process.env.DB_HOST || 'rm-bp14wd51i709c3z79ho.mysql.rds.aliyuncs.com',
  user: process.env.DB_USER || 'root',
  password: process.env.DB_PASSWORD || 'Ircnjfdhnvxwz@123',
  database: process.env.DB_NAME || 'xiaoyoubao',
  port: process.env.DB_PORT || 3306,
  connectTimeout: 15000, // 15秒连接超时
};

async function testConnection() {
  try {
    console.log('正在连接到数据库...');
    console.log(`主机: ${dbConfig.host}`);
    console.log(`端口: ${dbConfig.port}`);
    console.log(`数据库: ${dbConfig.database}`);
    console.log(`用户名: ${dbConfig.user}`);

    const connection = await mysql.createConnection(dbConfig);
    console.log('数据库连接成功！');

    // 测试查询表结构
    console.log('\n查询数据库表:');
    const [tables] = await connection.execute('SHOW TABLES');
    console.log('数据库表列表:');
    if (tables.length === 0) {
      console.log('数据库中没有表');
    } else {
      tables.forEach((row, index) => {
        const tableName = Object.values(row)[0];
        console.log(`${index + 1}. ${tableName}`);
      });
    }

    await connection.end();
    console.log('\n数据库连接已关闭');
  } catch (error) {
    console.error('连接失败：', error.message);
    console.error('错误代码：', error.code);

    console.log('\n请检查以下可能的问题:');
    console.log('1. 确认数据库服务器地址和端口是否正确');
    console.log('2. 确认用户名和密码是否正确');
    console.log('3. 检查网络连接是否正常');
    console.log('4. 检查防火墙设置是否允许数据库连接');
    console.log('5. 确认已在阿里云控制台设置IP白名单');
  }
}

// 执行测试
testConnection().catch(err => {
  console.error('执行过程中发生未捕获的错误:', err);
});